package com.itheima.health.config;

import com.itheima.health.common.RedisConst;
import com.itheima.health.service.SetMealService;
import com.itheima.health.util.QiniuUtils;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
@Slf4j
public class ClearImageJob {
    //清理前最小等待时间                            十分钟
    private static final Long MIN_DELETE_WAIT_TIME = 10 * 60 * 1000L;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private QiniuUtils qiniuUtils;
    @Autowired
    private SetMealService setMealService;

    @Scheduled(cron = "0 0 2 * * ?")//这是设置时间  什么时候清理垃圾
    public void executeInternal() throws JobExecutionException {
        log.info("清理图片开始...");
        //首先要查询到Redis里的图片信息
        Set<String> set = redisTemplate.boundSetOps(RedisConst.SETMEAL_PIC_RESOURCES).members();
        //遍历   img就是查出来的Redis中每个图片信息
        for (String img : set) {
            try {
                System.out.println("截取的图片" + img);
//                String[] s = img.split("_", 2);
//                String s1 = s[0];
//            Long createTime = Long.valueOf(s1);
                //类型转换 String转换成long    分割图片名  通过什么分割 分成几份  存成索引几
                Long creatTime = Long.valueOf(img.split("_", 2)[0]);
                System.out.println("截取之后的文件名" + creatTime);
                //先判断 清理时间是否大于设置的最小的清理时间
                if(System.currentTimeMillis()-creatTime<MIN_DELETE_WAIT_TIME){
                    log.info("清理的图片小于最小等待时间,暂不清除:{}",img);
                    continue;

                }
                //判断是否有使用
               long count= setMealService.countByImg(img);
                if(count==0){
                  //如果未使用 从七牛云删除
                  log.info("清理垃圾图片"+img);
                  qiniuUtils.deleteFileFromQiniu(img);
              }else {
                  //如果使用了,就不用删
                  log.info("图片正在使用,无需清理.."+img);
              }
              redisTemplate.boundSetOps(RedisConst.SETMEAL_PIC_RESOURCES).remove(img);

            }catch (RuntimeException e){
                log.info("清除垃圾图片失败"+img,e);
                continue;
            }

        }
        log.info("垃圾图片已清除....");

        }

    }